public class Test {
      public class TreeNode {
          int val;
          TreeNode left;
          TreeNode right;
          TreeNode() {}
          TreeNode(int val) { this.val = val; }
          TreeNode(int val, TreeNode left, TreeNode right) {
              this.val = val;
              this.left = left;
              this.right = right;
          }
      }

    class Solution {
        public boolean isSameTree(TreeNode p, TreeNode q) {
            if(p == null && q != null || q == null && p != null ){
                return false;
            }
            //两个都为空
            if(p == null && q == null){
                return true;
            }
            //两个都不为空
            if(p.val != q.val){
                return false;
            }
            return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
        }

        //另一颗树的子树
        public boolean isSubtree(TreeNode root, TreeNode subRoot) {
            if (root == null || subRoot ==null ) return false;

            if (isSameTree(root,subRoot)){
                return true;
            }
            if(isSubtree(root.left,subRoot)){
                return true;
            }
            if(isSubtree(root.right,subRoot)){
                return true;
            }
            return false;
        }
    }
}
